/**
 * Copyright(c) 2013 Jade Techonologies Co., Ltd.
 *
 * History:
 *   13-4-14 下午5:06 Created by dwzhang
 */
package com.jade.framework.base.util;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * 使用HashMap实现的Parameters.
 *
 * @author dwzhang
 * @version 1.0 13-4-14 下午5:06
 */
public class SimpleParameters extends AbstractParameters
{
    protected Map<String, Object> map;

    public SimpleParameters()
    {
        this(0);
    }

    public SimpleParameters(int size)
    {
        map = new HashMap<String, Object>(size);
    }

    public Object clone()
            throws CloneNotSupportedException
    {
        SimpleParameters params = (SimpleParameters)super.clone();
        params.putAll(map);
        return params;
    }

    /**
     * 返回对象型参数
     *
     * @param key 键值
     * @return 如果找不到返回是<code>#DEFAULT_OBJECT</code>
     */
    public Object getObject(String key)
    {
        return map.get(key);
    }

    /**
     * 设置对象型参数
     *
     * @param key   键值
     * @param value 对象型
     */
    public Object setObject(String key, Object value)
    {
        return map.put(key, value);
    }

    /**
     * 返回所有的参数名称
     *
     * @return 参数名称枚举
     */
    public Iterator<String> getNames()
    {
        return map.keySet().iterator();
    }

    /**
     * 返回各种数据类型对象
     *
     * @return 对象枚举
     */
    public Iterator getValues()
    {
        return map.values().iterator();
    }

    /** 设置所有的 */
    public void putAll(Parameters param)
    {
        if (param != null) {
            if (param instanceof SimpleParameters) {
                map.putAll(((SimpleParameters)param).map);
            }
            else {
                Iterator names = param.getNames();
                while (names.hasNext()) {
                    String name = (String)names.next();
                    map.put(name, param.getObject(name));
                }
            }
        }
    }

    /**
     * 删除参数值
     *
     * @param name 参数名
     * @return 删除的对象，如果不存在返回<code>null</code>
     */
    public Object remove(String name)
    {
        return map.remove(name);
    }

    /** 清除所有的参数 */
    public void clear()
    {
        map.clear();
    }

    public int hashCode()
    {
        return map.hashCode();
    }

    public String toString()
    {
        return map.toString();
    }

    /** 是否为空 */
    public boolean isEmpty()
    {
        return map.isEmpty();
    }

    /** 数目 */
    public int size()
    {
        return map.size();
    }
}
